/**
 * 活动指示器 (ActivityIndicator)
 * 
 * 功能说明：
 * - 提供加载中的视觉反馈
 * - 显示旋转动画和提示文本
 * - 用于长时间操作的等待提示
 * - 全局单例管理，方便调用
 * 
 * 设计模式：
 * - 单例模式 (Singleton Pattern)
 * - 继承自SingletonBehaviour<ActivityIndicator>
 * 
 * 特点：
 * - 全局唯一的加载指示器
 * - 支持自定义提示文本
 * - 无限旋转动画效果
 * - 简单的显示/隐藏控制
 * 
 * 使用场景：
 * - 网络请求等待
 * - 资源加载等待
 * - 数据同步等待
 * - 长时间操作等待
 * - 游戏初始化等待
 */

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityHelpers;
using TMPro;

namespace Game.UI
{
    /**
     * 活动指示器组件
     * 
     * 提供加载中的视觉反馈，包括旋转动画和提示文本
     * 使用单例模式，全局统一管理
     */
    public class ActivityIndicator : SingletonBehaviour<ActivityIndicator>
    {
        /**
         * 提示文本组件
         * 
         * 显示加载提示的文本内容
         */
        [SerializeField]
        private TextMeshProUGUI text;

        /**
         * 旋转节点
         * 
         * 执行无限旋转动画的Transform节点
         * 通常是加载图标或旋转指示器
         */
        [SerializeField]
        private Transform node2;

        /**
         * Unity生命周期：Start方法
         * 
         * 功能：
         * - 初始化时隐藏活动指示器
         * - 确保游戏启动时不会显示加载状态
         */
        private void Start()
        {
            // 默认隐藏活动指示器
            gameObject.transform.GetChild(0).gameObject.SetActive(false);
        }

        /**
         * 显示活动指示器
         * 
         * 功能：
         * - 激活活动指示器UI
         * - 设置提示文本内容
         * - 开始旋转动画
         * 
         * 参数：
         * - text: 要显示的提示文本
         * 
         * 使用示例：
         * ActivityIndicator.Show("正在加载...");
         * ActivityIndicator.Show("连接服务器中...");
         */
        public static void Show(string text)
        {
            // 激活活动指示器UI
            Instance.gameObject.transform.GetChild(0).gameObject.SetActive(true);
            
            // 设置提示文本
            Instance.text.text = text;
        }

        /**
         * 隐藏活动指示器
         * 
         * 功能：
         * - 隐藏活动指示器UI
         * - 停止旋转动画
         * - 清理提示文本
         * 
         * 使用示例：
         * ActivityIndicator.Hide();
         */
        public static void Hide()
        {
            // 隐藏活动指示器UI
            Instance.gameObject.transform.GetChild(0).gameObject.SetActive(false);
        }

        /**
         * 更新旋转动画
         * 
         * 功能：
         * - 控制旋转节点的旋转动画
         * - 实现无限旋转效果
         * 
         * 参数：
         * - deltaTime: 时间增量，用于平滑旋转
         * 
         * 旋转说明：
         * - 绕Z轴旋转（垂直于屏幕）
         * - 每秒旋转360度
         * - 使用Time.deltaTime确保帧率无关的旋转速度
         */
        private void UpdateAnimation(float deltaTime)
        {
            // 绕Z轴旋转，每秒360度
            node2.Rotate(0, 0, deltaTime * 360f);
        }

        /**
         * Unity生命周期：Update方法
         * 
         * 功能：
         * - 每帧更新旋转动画
         * - 确保旋转动画的连续性
         */
        private void Update()
        {
            // 更新旋转动画
            UpdateAnimation(Time.deltaTime);
        }
    }
}
